package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	
	/**
	 * ...
	 * @author Erik Molenaar (& Jorden Schoonderwoerd & Matthijs de Wachter?)
	 */
	public class BitmapButton extends Sprite
	{
		private var button:Bitmap;
		private var bitmapData:BitmapData, bitmapDataUp:BitmapData, bitmapDataDown:BitmapData;
		private const THRESHOLD:Number = 0;

		public function BitmapButton(ImageDataUp:Class, ImageDataDown:Class, x:int, y:int)
		{
			this.x = x;
			this.y = y;
			
			var buttonUp:Bitmap = new ImageDataUp(), buttonDown:Bitmap = new ImageDataDown();
			button = new ImageDataUp();
			addChild(button);
			
			bitmapDataUp = buttonUp.bitmapData;
			bitmapDataDown = buttonDown.bitmapData;
			bitmapData = bitmapDataUp;
			
			addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			addEventListener(MouseEvent.ROLL_OUT, onRollOut);
			addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
			addEventListener(MouseEvent.CLICK, onClick);
		}
		
		private function onRollOver(e:MouseEvent):void 
		{
			var pixel:uint = bitmapData.getPixel32(mouseX, mouseY)
			this.useHandCursor = this.buttonMode = ((pixel >>> 24) > 25);
			if ((pixel >>> 24) > 25)
				button.bitmapData = bitmapDataDown;
			else
				button.bitmapData = bitmapDataUp;
		}
		
		private function onRollOut(e:MouseEvent):void 
		{
			button.bitmapData = bitmapDataUp;
		}
		
		private function onMouseMove(e:MouseEvent):void 
		{
			var pixel:uint = bitmapData.getPixel32(mouseX, mouseY)
			this.useHandCursor = this.buttonMode = ((pixel >>> 24) > 25);
			if ((pixel >>> 24) > 25)
				button.bitmapData = bitmapDataDown;
			else
				button.bitmapData = bitmapDataUp;
		}
		
		private function onClick(e:MouseEvent):void 
		{
			if (!this.useHandCursor)
			{
				e.stopImmediatePropagation();    //Stopt het event omdat er dan geklikt wordt op een doorzichtige pixel van de knop
				parent.dispatchEvent(e.clone()); //Stuurt een kopie van het event voor globale events voor bijvoorbeeld achievements
			}			
		}
		
	}

}